from enum import Enum

from PySide6.QtGui import QTextOption, Qt, QFont
from PySide6.QtWidgets import QGraphicsTextItem

from 程序核心代码.mvvm重构.基础定义.基础图形项.基础图形组件.子组件.通用基类.模型定义 import 组件模型基类, 组件节点图形项基类


class 对齐方式(Enum):
    左对齐 = Qt.AlignLeft
    右对齐 = Qt.AlignRight
    居中对齐 = Qt.AlignCenter
    两端对齐 = Qt.AlignJustify

class 基础文本组件模型(组件模型基类):
    默认字体 = "Arial"
    默认字体大小 = 12
    def __init__(self, 文本内容="", 字体=默认字体, 字体大小=默认字体大小):
        super().__init__("基础文本组件", 文本内容=文本内容, 字体=字体, 字体大小=字体大小)

class 基础文本组件图形(组件节点图形项基类):
    def __init__(self,基础文本组件模型:组件模型基类, 父项=None):
        super().__init__( 基础文本组件模型, 父项)
    def 组件初始化(self):
        self.组件 = QGraphicsTextItem(self.图形项属性.get("文本内容"))
        self.注册属性触发函数("字体", self.更新字体属性)
        self.注册属性触发函数("字体大小", self.更新字体属性)
        self.注册属性触发函数("文本内容", self.更新文本内容)
        self.注册属性触发函数("对齐方式", self.设置文本对齐方式)

    def 设置文本对齐方式(self):
        """设置文本对齐方式"""
        try:
            self.组件.document().setDefaultTextOption(QTextOption(self.图形项属性.get("对齐方式").value))
            self.组件.adjustSize()
        except Exception as e:
            print(f"设置文本对齐方式时发生错误: {e}")

    def 更新文本内容(self):
        self.组件.setPlainText(self.图形项属性.get("文本内容"))
        self.调整大小()

    def 更新字体属性(self):
        """自动应用当前的字体和字体大小"""
        try:
            font = QFont(self.图形项属性.get("字体"), self.图形项属性.get("字体大小"))
            self.组件.setFont(font)
        except Exception as e:
            print(f"设置字体属性时发生错误: {e}")


    def resizeEvent(self, event):
        super().resizeEvent(event)
        self.调整大小()

    def 调整大小(self):
        self.组件.setFixedSize(self.组件.boundingRect().size().width(), self.组件.boundingRect().size().height())# 限制文本高度为组件高度
        self.组件.setTextWidth(self.boundingRect().width())  # 限制文本宽度为组件宽度